python 基础知识 自调用if __name__ == '__main__'

正确理解自调用

name 是当前模块名,当模块被直接运行时模块名为 main 这句话的意思就是,当模块被直接运行时,以下代码块将被运行 当模块是被导入时,代码块不被运行

可以理解为 if name == main 底下的是私有代码

来解释一下使用场景

通过 name的值,我们可以判断出该模块是作为脚本正在执行还是被其他模块导入,而根据这个判断,我们就可以选择性地执行代码

比如我现在有两个py文件 ,其中 one.py文件运行的时候 函数模块one.py是作为**脚本正在执行;

two.py文件运行的时候,函数模块one.py是被其他模块导入

one.py:

1
2
3
4
5
6
7
8
9
10
# file one.py
def func():
print("func() in one.py")

print("top-level in one.py")

if __name__ == "__main__":
print("one.py is being run directly")
else:
print("one.py is being imported into another module")

two.py:

1
2
3
4
5
6
7
8
9
10
# file two.py
import one

print("top-level in two.py")
one.func()

if __name__ == "__main__":
print("two.py is being run directly")
else:
print("two.py is being imported into another module")

如果你执行one.py文件,

1
python one.py

会输出:

1
2
top-level in one.py
one.py is being run directly #模块被直接运行,代码块将被运行

如果你执行two.py文件,

1
python two.py

会输出:

1
2
3
4
5
top-level in one.py #调用模块 程序顺序运行
one.py is being imported into another module
top-level in two.py
func() in one.py
two.py is being run directly

再次强调

一个 Python 源码文件除了可以被直接运行外,还可以作为模块(也就是库)被导入。不管是导入还是直接运行,最顶层的代码都会被运行(Python 用缩进来区分代码层次)。而实际上在导入的时候,有一部分代码我们是不希望被运行的。因此,我们只要写一句

1
2
3
4
5
6
if __name__=='__main__'
#running code here by itself 主动运行时
#
else:
# codes when imported 被调用时
#

Reference

Python 中的 if name == ‘main‘ 该如何理解

-------------本文结束 谢谢阅读-------------
-------------若有错误欢迎评论-------------
2块钱请我吃根热狗吧,啾咪.⁄( ⁄•⁄ω⁄•⁄ )⁄.